// cf-628d
// 题意：定义d-migic number就是对于一个没前导零的数字从左往右从1开始
//       偶数位都是d，奇数位都不是d的数。
//       现在要求给定[a, b]区间里，d-magic number且恰为m的倍数的数的个数。
//       a, b长度想等不超过2000位，m<=2000。
//
// 题解：定义f[i][j][2][2]表示从左往右做了前i位，当前模余数为j，
//       是否严格大于a以及是否严格大于b的数的个数。
//       转移很简单。最后答案就是f[n][0]加起来。
//
// run: $exec < input
#include <iostream>
#include <string>

int const maxn = 2007;
int const maxm = 2007;
long long const mo = 1000000007;
long long f[maxn][maxm][2][2]; // first >a second <b
int m, d;

std::string a, b;

template <class T>
void add_mod(T & a, T b) { a = (a + b) % mo; }

int main()
{
	std::cin >> m >> d;
	std::cin >> a >> b;
	int l = a.size();
	f[0][0][0][0] = 1;
	for (int i = 0; i < l; i++) {
		for (int j = 0; j < m; j++) {
			for (int t1 = 0; t1 < 2; t1++)
				for (int t2 = 0; t2 < 2; t2++) {
					if (!f[i][j][t1][t2]) continue;
					int l = 0, r = 9;
					if (!t1) l = a[i] - '0';
					if (!t2) r = b[i] - '0';
					for (int t = l; t <= r; t++) {
						if (i & 1 && t != d) continue;
						if (!(i & 1) && t == d) continue;
						if (!t1 && !t2)
							add_mod(f[i + 1][(j * 10 + t) % m][t > l][t < r], f[i][j][t1][t2]);
						else if (!t1 && t2)
							add_mod(f[i + 1][(j * 10 + t) % m][t > l][1], f[i][j][t1][t2]);
						else if (t1 && !t2)
							add_mod(f[i + 1][(j * 10 + t) % m][1][t < r], f[i][j][t1][t2]);
						else
							add_mod(f[i + 1][(j * 10 + t) % m][1][1], f[i][j][t1][t2]);
					}
				}
		}
	}
	long long ans = 0;
	for (int i = 0; i < 2; i++)
		for (int j = 0; j < 2; j++)
			ans = (ans + f[l][0][i][j]);
	std::cout << ans << '\n';
}

